package msu.ml.data;

import msu.ml.core.*;
import weka.core.*;

public interface IDataProvider
{
    void addFilter(IDataPreProcessor filter);
    void clearFilters();
    void reset();
    int count();
    void initialize();
    NxInstances [] getNextTargetData();

    /**
     * Provides the next set of training instances in one
     * large Instances object.
     *
     * @return next training data
     */
    NxInstances getNextTrainingData();


    /**
     * Get the names of the data sources used in the
     * next set of training data.
     *
     * @return the labels of the next training data
     */
    String [] getNextTrainingLabels();


    /**
     * Provides the next set of training instances.
     *
     * @return next training data
     */
    NxInstances [] getNextIndividualTrainingData();

    /**
     * Return whether there is more data 
     *
     * @return true if more data exists
     */
    boolean hasMoreData();
}
